// 素数，埃式筛选, 埃拉托斯特尼筛法
#include <algorithm>
#include <iostream>
#include <map>
#include <set>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <vector>
using namespace std;

#define DEBUG

#ifdef DEBUG
#define PF(...) printf(__VA_ARGS__)
#else
#define PF(...)
#endif

unordered_set<int> stPrimeNot;
vector<int> vtPrime;
#define MAX_RANGE 3000000

// 素数，埃式筛选, 埃拉托斯特尼筛法
int PrimeEratostaniSieve(int nNumb) {
  stPrimeNot.reserve(nNumb / 2);
  stPrimeNot.insert(0);
  stPrimeNot.insert(1);
  for (int i = 2; i <= MAX_RANGE; i++) {
    if (stPrimeNot.count(i) == 0) {
      for (int j = 2 * i; j <= nNumb; j += i) {
        stPrimeNot.insert(j);
      }
    }
  }
  return stPrimeNot.size();
}

int main() {
  int count = PrimeEratostaniSieve(MAX_RANGE);
  PF("%d\n", count);
  vtPrime.reserve(stPrimeNot.size());
  for (int i = 1; i < stPrimeNot.size(); i++) {
    if (stPrimeNot.count(i) == 0) {
      vtPrime.push_back(i);
    }
  }
  std::sort(vtPrime.begin(), vtPrime.end());
  return 0;
}
